BOJ_1806_부분합
투 포인터(Two-Pointers)를 사용해서 연속된 수들의 최소 개수 부분합을 구하는 문제
두 포인터를 0에 위치시킨 후, sum이 S보다 크거나 같으면 left를 당기면서 조건을 만족하는 최소 수열을 구한다
sum이 S보다 작아지면 직전 숫자를 포함한 현재 길이 + 1 와 min_range를 비교해 최솟값을 갱신한다
import sys
N, S = list(map(int, input().split()))
nums = list(map(int, input().split()))
left = 0
right = 0
sum = nums[0]
min_range = sys.maxsize
while True:
if sum >= S:
while sum >= S:
sum -= nums[left]
left += 1
min_range = min(min_range, right - left + 2)
if min_range == 1:
break
else:
if right < N - 1:
right += 1
sum += nums[right]
else:
break
print(min_range if min_range < sys.maxsize else 0)